如果光檢視這個標題 - 產生單元測試 可能會讓開發者有過於期待的情況發生。雖然本篇文章提供的案例確實可以產生單元測試,但對於組織內既有的程式碼若為 “非可測試程式”,或開發人員沒有具有撰寫可測試程式的經驗/能力,可能其效益不大。這邊回應了 Copilot 並非無所不能,仍需要準確的指引才能給予協助。
我們節錄微軟官方的案例,並做一些簡單整理。整理好的範例專案完整程式碼在(前置作業完成在 Main 分支,完成的內容在 Done 分支) ,有興趣的朋友可以下載時做看看。
首先我們需要建立一個 IsPrime 的服務:在方案下建立 Numbers 類別庫,加入 PrimeSerivce.cs,並加入下圖中的程式碼。
新增 xUnit 測試專案
設定專案名稱為 PrimeService.UnitTest,容易識別。
在新建的測試專案內加入專案參考 - Number 專案
使用內嵌方式產生單元測試
首先,我們以內嵌方式給予提示,@workspace /tests 產生適用於 xUnit framework 的 unit tests
GitHub Copilot 會產生出測試案例,我們點選接受
完成後會發現有錯誤產生,這個錯誤是類別名稱與 namespace 衝突,且沒有引用類別庫內的 namespace 或類別。
如下圖修正後,測試程式可以正常建置與執行
使用聊天模式產生單元測試
我們開啟 Chat View ,以相同的 @workspace /tests 產生適用於 xUnit framework 的 unit tests
提示來產生單元測試。
在單元測試專案下建立一個新的檔案 (PrimeServiceTests.cs),將建議的內容複製貼上並簡單整理。
(如果您是使用 Visual Studio,可以點選插入新檔案,將檔案儲存至單元測試專案下)
完成後內容如下:
眼尖的讀者會發現內嵌與聊天方式所產生出來的測試案例有所不同,並可能需要進行調整後才沒有錯誤。另一方面,namespace、class 與 method 可能也需要調整會較為一致,避免混淆。所以使用 GitHub Copilot 並非一蹴可幾。
最後您可以在單元測試任一檔案空白處點選執行測試,確認每個測試案例皆有通過,完成我們這次 GitHub Copilot 產生 Unit Test 示範。
若讀者有機會實際實作,應該會發現許多實作案例可能需要視情況做調整,或者多次修改提示並測試。唯有多次嘗試並累積經驗,才能讓這位副駕駛提供準確的建議並提高正駕駛的工作生產力,建議讀者可以多找幾篇實作案例練習。